
import dao.DaoAdmin;
import dao.DaoEscola;
import dao.DaoMateria;
import dao.DaoProfessor;
import dao.DaoSecretario;
import model.Nota;
import model.Professor;
import model.Serie;
import model.Materia;
import model.Secretario;
import model.Admin;
import model.Escola;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import java.util.Iterator;


public class Main {
    public static void main(String args[]){
        int op=0;
        DaoAdmin daoAdmin = new DaoAdmin();
        DaoEscola daoEscola = new DaoEscola();
        DaoSecretario daoSecretario = new DaoSecretario();
        DaoProfessor daoProfessor = new DaoProfessor();
        DaoMateria daoMateria = new DaoMateria();
        daoAdmin.inserir((new Admin("admin", "admin", "123")));
        
        while (op != 9) {
            op = Integer.parseInt(JOptionPane.showInputDialog(null," PROJETO SAREMCA \n" +
                                                                   " 1 - ADMINISTRADOR \n" +
                                                                   " 2 - SECRETARIO \n" +
                                                                   " 3 - PROFESSOR\n "+
                                                                   " 9 - Sair" )
            );

            switch(op){
                case 1://Adiministrador
                {
                    String usuario = JOptionPane.showInputDialog(null,"Informe o Usuário");
                    String senha = JOptionPane.showInputDialog(null,"Digite a senha");
                    boolean ret = daoAdmin.login(usuario, senha);
                    if(!ret){
                        JOptionPane.showMessageDialog(null,"Usuario Invalido");
                        break;
                    }
                    while(op != 0) {
                        op = Integer.parseInt(JOptionPane.showInputDialog(null," - Administrador \n\n"+
                                                                               " 1 - Cadastro de Escola \n"+
                                                                               " 2 - Cadastro de Série\n"+
                                                                               " 3 - Cadastro de Matéria\n"+
                                                                               " 4 - Cadastrar Secretário \n"+
                                                                               " 5 - Cadastrar Professor \n"+
                                                                               " 6 - Listar Escolas\n"+
                                                                               " 7 - Listar Séries\n"+
                                                                               " 8 - Listar Matéria\n"+
                                                                               " 9 - Inserir Matéria na Série\n"+ 
                                                                               " 0 - VOLTAR \n")
                        );

                        switch(op){
                            case 1://Cadastro de escola
                            {
                                
                                String nome = JOptionPane.showInputDialog(null,"Informe o nome da Escola: ");
                                String endereco = JOptionPane.showInputDialog(null,"Informe o Endereço: ");
                                String telefone = JOptionPane.showInputDialog(null,"Informe o Telefone: ");
                                
                                Escola e = new Escola(nome,endereco,telefone);
                                daoEscola.inserir(e);
                            }
                            break;
                            case 2://Cadastro de Série
                            {  
                                List<Escola> escolas = daoEscola.listarTodos();
                                
                                Escola escola = (Escola) escolhaMenu(escolas);
                                
                                int descricao = Integer.parseInt(JOptionPane.showInputDialog(null,"Informe a Série: "));
                                String turma = JOptionPane.showInputDialog(null,"Informe a Turma: ");
                                String tipoEnsino = JOptionPane.showInputDialog(null,"Informe o tipo de Ensino: ");
                
                                Serie s = new Serie(descricao, turma, tipoEnsino);
                                escola.addSeries(s);
                                
                                daoEscola.atualizar(escola);
                                
                            }
                            break;
                            case 3://Cadastro de Matéria
                            {
                               
                                String nome = JOptionPane.showInputDialog(null,"Informe a Matéria: ");
                               
                                Materia m = new Materia(nome);
                                
                                daoMateria.inserir(m);
                                
                            }
                            break;
                            case 4://Cadastrar Secretário
                            {
                                String nome = JOptionPane.showInputDialog(null,"Informe o nome: ");
                                String user = JOptionPane.showInputDialog(null,"Informe o usuário: ");
                                String pass = JOptionPane.showInputDialog(null,"Informe a senha: ");
               
                                Secretario sec = new Secretario(nome, user, pass);
                                
                                daoSecretario.inserir(sec);
                            }
                            break;
                            case 5://Cadastrar Professor
                            {
                                String nome = JOptionPane.showInputDialog(null,"Informe o nome: ");
                                String user = JOptionPane.showInputDialog(null,"Informe o usuário: ");
                                String pass = JOptionPane.showInputDialog(null,"Informe a senha: ");
                                
                                Professor prof = new Professor(nome, user, pass);
                                
                                daoProfessor.inserir(prof);
                            }
                            break;
                            case 6: //Listar Escolas
                            {
                                Iterator<Escola> i = daoEscola.listarTodos().iterator();
                                String listaEscolas = "";
                                while(i.hasNext()){
                                   listaEscolas+=i.next().getNome()+"\n"; 
                                }
                                JOptionPane.showMessageDialog(null, listaEscolas);
                            }
                            break;
                            case 7: //Listar Séries
                            {
 
                                Escola escola = (Escola) escolhaMenu(daoEscola.listarTodos());
                                
                                List<Serie> series = escola.getSeries();
                                
                                Iterator<Serie> it = series.iterator();
                                
                                String mostraSeries = "";
                                while(it.hasNext()){
                                    Serie s = it.next();
                                    mostraSeries+=s.getDescricao()+" - "+s.getTurma()+" - "+s.getTipoEnsino()+"\n";
                                }
                                JOptionPane.showMessageDialog(null, mostraSeries);
                                
                            }
                            break;
                            case 8:
                                
                                List<Materia> materias = daoMateria.listarTodos();
                                
                                Iterator<Materia> itmateria = materias.iterator();
                                
                                String mostraMaterias = "";
                                while (itmateria.hasNext()) {
                                    Materia m = itmateria.next();
                                    mostraMaterias += m.getNome()+"\n";
                                }
                                JOptionPane.showMessageDialog(null, mostraMaterias);
                            
                            break;
                            case 0:// retorna pro menu inicial
                               // JOptionPane.showMessageDialog(null, "Logoff");
                                break;
                            default:{
                                JOptionPane.showMessageDialog(null, "Opção incorreta!\n"+
                                                    "Favor digite uma das opções do Menu.");
                            } 
                                
                        }       
                    }
                }
                break;
                    
                case 2://Secretário 
                {   /*
                    Secretario sec = new Secretario(null, null, null);
                    String usuario = JOptionPane.showInputDialog(null,"Informe o Usuário");
                    String senha = JOptionPane.showInputDialog(null,"Digite a senha");
                    boolean ret = sec.login(usuario, senha);
                    if(!ret){
                        JOptionPane.showMessageDialog(null,"Usuario Invalido");
                        break;
                    }      
                   */
                    while (op != 0) {
                        op = Integer.parseInt(JOptionPane.showInputDialog(null," - Secretário \n\n"+
                                                                               "  1 - Cadastro de Turma \n"+
                                                                               "  2 - Gerar Notas \n"+
                                                                               "  3 - Alterar Notas \n"+ 
                                                                               "  4 - Listar Notas\n"+
                                                                               "  0 - Voltar")
                        );
                  
                        switch(op){
                            case 1://Cadastro de Turma
                            {
                                int descricao = Integer.parseInt(JOptionPane.showInputDialog(null,"Informe a Série: "));
                                String turma = JOptionPane.showInputDialog(null,"Informe a Turma: ");
                                String tipoEnsino = JOptionPane.showInputDialog(null,"Informe o tipo de Ensino: ");
               
                                Serie s = new Serie(descricao, turma, tipoEnsino);
                            }
                                break;
                            case 2://Gerar Notas
                            {
                                
                                //Escolhe a escola
                                
                                //Escolhe a série
                                
                                //Escolhe a materia da serie
                                
                                //Cria a nota
                                
                                //Inserie a materia na nota
                                
                                //Insere a nota na serie

                                
                                int numero = Integer.parseInt(JOptionPane.showInputDialog(null,"Numero do Aluno: "));
                                double nota = Double.parseDouble(JOptionPane.showInputDialog(null,"Digite a Nota: "));
                                
                                Nota n = new Nota();
                            }
                                break;
                            case 3://Alterar Notas
                                
                                break;
                            case 0://Logoff
                                break;
                            default: JOptionPane.showMessageDialog(null, "Opção incorreta!\n"+
                                                    "Favor digite uma das opções do Menu.");
                        }
                    }
                }
                break;
                
                case 3://Professor
                {/*
                    Professor prof = new Professor(nome, usuario, senha);
                    String usuario = JOptionPane.showInputDialog(null,"Informe o Usuário");
                    String senha = JOptionPane.showInputDialog(null,"Digite a senha");
                    
                    boolean ret = prof.login(usuario, senha);
                    if(!ret){
                        JOptionPane.showMessageDialog(null,"Usuario Invalido");
                        break;
                    } 
                    */
                    while (op != 0) {
                        op = Integer.parseInt(JOptionPane.showInputDialog(null," - Professor \n \n "+
                                                                               "  1 - Visualizar Notas \n"+
                                                                               "  2 - Notificar Secretário de alterações\n"+
                                                                               "  0 - Voltar")
                        );
                 
                        switch(op){
                            case 1://Visualizar Notas
                            
                                break;
                            case 2://Notificar Secretário de alterações
                            
                                break;
                            case 0://Logoff
                                break;
                            default: JOptionPane.showMessageDialog(null, "Opção incorreta!\n"+
                                                    "Favor digite uma das opções do Menu.");    
                        }
                    }
                }
                break;
                case 9://sair
                    break;
                    
                default: JOptionPane.showMessageDialog(null, "Opção incorreta!\n"+
                                                    "Favor digite uma das opções do Menu.");
           
            }
        }        
        daoAdmin.closeEntityManager();
        daoEscola.closeEntityManager();
        daoProfessor.closeEntityManager();
        daoSecretario.closeEntityManager();
    }
    
    public static Object escolhaMenu(List lista){
        Object obj = null;
        
        Iterator<Object> objetos = lista.iterator();
        
        //Monta Menu
        String menu = "";
        int i=0 , k = 0;
        while(objetos.hasNext()){
           i++;
           Object objTmp = objetos.next();
           if (objTmp instanceof Escola){
               Escola e = (Escola) objTmp;
               menu+=i+" - "+e.getNome()+"\n";
               k=1;
           }else if(objTmp instanceof Serie){
               Serie s = (Serie) objTmp;
               menu += i+" - "+s.getDescricao()+" - "+s.getTurma()+" - "+s.getTipoEnsino()+"\n";
               k=2;
           }           
        }
                    
        //Mostra Menu
        if(k == 1){
            String opc = JOptionPane.showInputDialog(null, "Escolha uma das Escolas\n"+menu);
            
            Iterator it = lista.iterator();
            
            for (int y=0; y < Integer.parseInt(opc);y++){
                obj = it.next();
            }
            
        }else{
            String opc = JOptionPane.showInputDialog(null, "Escolha uma das Séries\n"+menu);
            
            Iterator it = lista.iterator();
            
            for (int y=0; y < Integer.parseInt(opc);y++){
                obj = it.next();
            }
            
        }
        
        return obj;
    }
    
    
}